#ifndef CELLTYPE_H_
#define CELLTYPE_H_

#include <vector>

namespace catan
{

class CellType
{
public:
	enum Enum_CellType { DESERT_TYPE, FOREST_TYPE, PASTURE_TYPE, FIELDS_TYPE, HILLS_TYPE, MOUNTAINS_TYPE, OPEN_SEA_TYPE, GENERAL_HARBOR_TYPE, WOOD_HARBOR_TYPE, SHEEP_HARBOR_TYPE, WHEAT_HARBOR_TYPE, BRICK_HARBOR_TYPE, ORE_HARBOR_TYPE };
	
	static const std::vector<Enum_CellType> &getVectorOfPossibleEnumValues();
	static const std::vector<Enum_CellType> &getVectorOfLandEnumValues();
	static const std::vector<Enum_CellType> &getVectorOfHarborEnumValues();
	static bool canInit(Enum_CellType enumCellType);
	
	CellType();
	explicit CellType(Enum_CellType enumCellType);
	Enum_CellType getEnum() const;
	bool operator==(const CellType &other) const;
	bool operator<(const CellType &other) const;
	CellType& operator=(const CellType& other);
	
private:
	static std::vector<Enum_CellType> vectorOfPossibleEnumValues;
	static std::vector<Enum_CellType> vectorOfLandEnumValues;
	static std::vector<Enum_CellType> vectorOfHarborEnumValues;
	
	Enum_CellType enumCellType;
};

static CellType desertType(CellType::DESERT_TYPE), forestType(CellType::FOREST_TYPE), pastureType(CellType::PASTURE_TYPE), fieldsType(CellType::FIELDS_TYPE), hillsType(CellType::HILLS_TYPE), mountainsType(CellType::MOUNTAINS_TYPE), openSeaType(CellType::OPEN_SEA_TYPE), generalHarborType(CellType::GENERAL_HARBOR_TYPE), woodHarborType(CellType::WOOD_HARBOR_TYPE), sheepHarborType(CellType::SHEEP_HARBOR_TYPE), wheatHarborType(CellType::WHEAT_HARBOR_TYPE), brickHarborType(CellType::BRICK_HARBOR_TYPE), oreHarborType(CellType::ORE_HARBOR_TYPE);

}

#endif /*CELLTYPE_H_*/
